using System;
using System.Collections.Generic;
using Csla;
using Ent.AccesoDatos;
using System.Data;

namespace EntGuayasSLA.BL.Listas
{
    /// <summary>
    /// Estereotipo: ReadOnlyList
    /// Reponsabilidad: 
    /// Autor: Luis Cuenca
    /// Fecha: 6/24/2013 11:30:09 AM
    /// </summary>
    [Serializable]
    public class TecnicoLista : ReadOnlyListBase<TecnicoLista, TecnicoInfo>
    {
        #region Authorization Rules

        private static void AddObjectAuthorizationRules()
        {
            // TODO: add authorization rules
            //AuthorizationRules.AllowGet(typeof(TecnicoLista), "Role");
        }

        #endregion

        #region Factory Methods

        public static TecnicoLista GetTecnicoLista(string filter)
        {
            return DataPortal.Fetch<TecnicoLista>(filter);
        }

        private TecnicoLista()
        { /* require use of factory methods */ }

        #endregion

        #region Data Access

        private void DataPortal_Fetch(string criteria)
        {
            RaiseListChangedEvents = false;
            IsReadOnly = false;
            var accesoDatos = new DriveDataBase(TypeDataBase.PostgreSql);
            var parametros = new List<Parametro> 
                    {
                        new Parametro("ec_seccion", criteria)
                    };
            DataSet datos = accesoDatos.EjecutarDataSet("\"LISTA_TECNICO\"", parametros);
            foreach (DataRow items in datos.Tables[0].Rows)
            {
                this.Add(TecnicoInfo.GetTecnicoInfo(items));
            }
            IsReadOnly = true;
            RaiseListChangedEvents = true;
        }

        #endregion
    }
    /// <summary>
    /// Estereotipo: ReadOnlyChild
    /// Reponsabilidad: 
    /// Autor: Luis Cuenca
    /// Fecha: 6/24/2013 11:30:09 AM
    /// </summary>
    [Serializable]
    public class TecnicoInfo : ReadOnlyBase<TecnicoInfo>
    {
        #region Business Methods

        public Guid Id { get; internal set; }
        public string PersonaId { get; internal set; }
        public string Nombre { get; internal set; }
        public string Apellido { get; internal set; }
        public string Identificacion { get; internal set; }
        public string Direccion { get; internal set; }
        public string Email { get; internal set; }
        public string Seccion { get; internal set; }
        public int NumeroProcesos { get; internal set; }
        //Propiedad que permite definir si esta asignado a una fase determinada
        public string Asignado { get; set; }
        #endregion

        #region Factory Methods

        internal static TecnicoInfo GetTecnicoInfo(DataRow childData)
        {
            return DataPortal.FetchChild<TecnicoInfo>(childData);
        }

        private TecnicoInfo()
        { /* require use of factory methods */ }

        #endregion

        #region Data Access

        private void Child_Fetch(DataRow childData)
        {
            //
            int np = 0;
            Id = Guid.Parse(childData["tec_id"].ToString());
            PersonaId = childData["per_id"].ToString();
            Seccion = childData["tec_seccion"].ToString();
            Apellido = childData["per_apellido"].ToString();
            Nombre = childData["per_nombre"].ToString();
            Identificacion = childData["per_identificacion"].ToString();
            Direccion = childData["per_direccion"].ToString();
            Email = childData["per_email"].ToString();
            int.TryParse(childData["nproceso"].ToString(), out np);
            NumeroProcesos = np;
            Asignado = "N";
        }

        #endregion
    }
}
